﻿using System;
using System.Collections.Generic;

namespace Material.Dialog.Icons
{
    public static class DialogIconsDataFactory
    {
        public static Lazy<IDictionary<DialogIconKind, string>> DataIndex { get; }

        public static Lazy<IDictionary<DialogIconKind, string>> RecommendColorIndex { get; }

        static DialogIconsDataFactory()
        {
            if (DataIndex == null)
            {
                DataIndex = new Lazy<IDictionary<DialogIconKind, string>>(Create);
            }

            if (RecommendColorIndex == null)
            {
                RecommendColorIndex = new Lazy<IDictionary<DialogIconKind, string>>(CreateColor);
            }
        }

        public static IDictionary<DialogIconKind, string> Create()
        {
            return new Dictionary<DialogIconKind, string>()
            {
                {
                    DialogIconKind.Blocked,
                    "M8 1C9.61948 1.00012 11.1888 1.56176 12.4406 2.58924C13.6924 3.61671 14.5492 5.04644 14.8651 6.63483C15.1809 8.22321 14.9362 9.87197 14.1727 11.3002C13.4092 12.7284 12.1741 13.8477 10.6779 14.4673C9.18163 15.087 7.51682 15.1687 5.9671 14.6985C4.41739 14.2283 3.07865 13.2353 2.17899 11.8887C1.27933 10.5421 0.874413 8.92518 1.03324 7.31351C1.19206 5.70183 1.90479 4.19509 3.05 3.05C3.70006 2.40001 4.47178 1.88442 5.32111 1.53268C6.17043 1.18094 7.08072 0.999934 8 1ZM2 8C2.00142 9.41722 2.50446 10.7882 3.42 11.87L11.87 3.42C10.9981 2.68012 9.93297 2.20479 8.8 2.05C7.95183 1.93589 7.08908 2.00455 6.26963 2.25136C5.45019 2.49817 4.69303 2.91742 4.04897 3.48097C3.40491 4.04452 2.88886 4.73933 2.53546 5.51876C2.18206 6.29818 1.99949 7.1442 2 8ZM14 8C13.9986 6.58278 13.4955 5.21181 12.58 4.13L4.13 12.58C4.99597 13.338 6.06166 13.8309 7.2 14C8.05235 14.1147 8.91941 14.0448 9.7424 13.7951C10.5654 13.5454 11.3251 13.1217 11.97 12.5526C12.6149 11.9836 13.1299 11.2826 13.4801 10.4971C13.8304 9.71162 14.0077 8.86001 14 8Z"
                },
                {
                    DialogIconKind.Error,
                    "M8.6 0.999985C10.2 1.09999 11.7 1.89999 12.8 2.99999C14.1 4.39999 14.8 6.09999 14.8 8.09999C14.8 9.69999 14.2 11.2 13.2 12.5C12.2 13.7 10.8 14.6 9.2 14.9C7.6 15.2 6 15 4.6 14.2C3.2 13.4 2.1 12.2 1.5 10.7C0.899997 9.19999 0.799997 7.49999 1.3 5.99999C1.8 4.39999 2.7 3.09999 4.1 2.19999C5.4 1.29999 7 0.899985 8.6 0.999985ZM9.1 13.9C10.4 13.6 11.6 12.9 12.5 11.8C13.3 10.7 13.8 9.39999 13.7 7.99999C13.7 6.39999 13.1 4.79999 12 3.69999C11 2.69999 9.8 2.09999 8.4 1.99999C7.1 1.89999 5.7 2.19999 4.6 2.99999C3.5 3.79999 2.7 4.89999 2.3 6.29999C1.9 7.59999 1.9 8.99999 2.5 10.3C3.1 11.6 4 12.6 5.2 13.3C6.4 14 7.8 14.2 9.1 13.9ZM7.89999 7.5L10.3 5L11 5.7L8.59999 8.2L11 10.7L10.3 11.4L7.89999 8.9L5.49999 11.4L4.79999 10.7L7.19999 8.2L4.79999 5.7L5.49999 5L7.89999 7.5Z"
                },
                {
                    DialogIconKind.Success,
                    "M5.2900313,9.8848149 L6.0000313,9.8848149 10.559941,5.3249749 9.8499413,4.6149749 5.6500313,8.8248649 3.7301413,6.9049549 3.0201413,7.6149549 5.2900313,9.8848149 z M7.6201413,0.014999887 C9.2201413,0.11500489 10.720141,0.91500489 11.820141,2.0150049 13.120141,3.4150049 13.820141,5.1150049 13.820141,7.1150049 13.820141,8.7150049 13.220141,10.215015 12.220141,11.515015 11.220141,12.715015 9.8201413,13.615015 8.2201413,13.915015 6.6201413,14.215015 5.0201413,14.015015 3.6201413,13.215015 2.2201413,12.415015 1.1201413,11.215015 0.5201413,9.7150149 -0.079861696,8.2150049 -0.1798617,6.5150049 0.3201413,5.0150049 0.8201413,3.4150049 1.7201413,2.1150049 3.1201413,1.2150049 4.4201413,0.31500489 6.0201413,-0.085000113 7.6201413,0.014999887 z M8.1201413,12.915015 C9.4201413,12.615015 10.620141,11.915015 11.520141,10.815015 12.320141,9.7150149 12.820141,8.4150049 12.720141,7.0150049 12.720141,5.4150049 12.120141,3.8150049 11.020141,2.7150049 10.020141,1.7150049 8.8201413,1.1150049 7.4201413,1.0150049 6.1201413,0.91500489 4.7201413,1.2150049 3.6201413,2.0150049 2.5201413,2.8150049 1.7201413,3.9150049 1.3201413,5.3150049 0.9201413,6.6150049 0.9201413,8.0150049 1.5201413,9.3150149 2.1201413,10.615015 3.0201413,11.615015 4.2201413,12.315015 5.4201413,13.015015 6.8201413,13.215015 8.1201413,12.915015 z"
                },
                {
                    DialogIconKind.Warning,
                    "M8.44 1H7.56L1 13.26L1.44 14H14.54L14.98 13.26L8.44 1ZM2.28 13L8 2.28L13.7 13H2.28ZM7.5 6H8.5V10H7.5V6ZM7.5 11H8.5V12H7.5V11Z"
                },
                {
                    DialogIconKind.Info,
                    "M8.56838 1.03128C10.1595 1.19039 11.6436 1.90518 12.76 3.04996C13.9763 4.28555 14.6955 5.92552 14.7803 7.65726C14.8651 9.38899 14.3098 11.0913 13.2201 12.4398C12.2178 13.6857 10.8113 14.5416 9.24429 14.8594C7.67727 15.1772 6.04844 14.9369 4.64004 14.18C3.22861 13.4066 2.12677 12.1706 1.52004 10.68C0.910598 9.18166 0.829469 7.52043 1.29003 5.96988C1.7496 4.42537 2.72797 3.0868 4.06002 2.17996C5.38101 1.27892 6.97729 0.87217 8.56838 1.03128ZM9.04006 13.8799C10.3829 13.6075 11.5887 12.8756 12.45 11.81C13.3826 10.6509 13.8571 9.18961 13.7834 7.70376C13.7097 6.21792 13.0928 4.81093 12.05 3.74991C11.0949 2.77492 9.82747 2.16667 8.46932 2.0314C7.11117 1.89613 5.74869 2.24247 4.62002 3.00992C3.77045 3.59531 3.08444 4.38792 2.62691 5.31265C2.16939 6.23738 1.95553 7.26359 2.00561 8.2941C2.05568 9.3246 2.36803 10.3253 2.91305 11.2013C3.45807 12.0773 4.2177 12.7997 5.12002 13.3C6.31834 13.9467 7.7058 14.1519 9.04006 13.8799ZM8.51002 6.99997L7.51002 6.99997L7.51002 11L8.51002 11L8.51002 6.99997ZM8.51002 4.99997L7.51002 4.99997L7.51002 5.99997L8.51002 5.99997L8.51002 4.99997Z"
                },
                {
                    DialogIconKind.Help,
                    "M3.88999 2.10001C4.64422 1.60008 5.49452 1.26313 6.38647 1.11073C7.27842 0.958334 8.19236 0.993849 9.0698 1.215C9.94723 1.43616 10.7688 1.83808 11.482 2.39503C12.1951 2.95199 12.7842 3.65172 13.2113 4.44942C13.6385 5.24712 13.8944 6.12523 13.9627 7.02752C14.0309 7.92982 13.91 8.83643 13.6078 9.68932C13.3055 10.5422 12.8284 11.3226 12.2072 11.9805C11.5859 12.6384 10.8342 13.1594 9.99999 13.51C8.50784 14.1372 6.83537 14.1852 5.30975 13.6445C3.78413 13.1037 2.51514 12.0132 1.75104 10.5863C0.98694 9.15944 0.782709 7.49879 1.1783 5.92927C1.57389 4.35974 2.54084 2.99428 3.88999 2.10001ZM4.43999 12.1C5.07944 12.5048 5.79556 12.7732 6.54353 12.8886C7.29149 13.0039 8.05521 12.9636 8.7869 12.7703C9.51859 12.5769 10.2025 12.2346 10.7958 11.7648C11.3892 11.2951 11.8792 10.7079 12.2352 10.04C12.5912 9.37217 12.8055 8.63804 12.8648 7.88355C12.9241 7.12907 12.827 6.37048 12.5796 5.65523C12.3323 4.93999 11.94 4.28349 11.4273 3.72681C10.9146 3.17013 10.2925 2.72525 9.59999 2.42001C8.59883 1.99909 7.49372 1.89102 6.42999 2.11001C5.36185 2.31864 4.38023 2.84114 3.61067 3.6107C2.84111 4.38026 2.31861 5.36188 2.10999 6.43001C1.89817 7.49512 2.00641 8.5991 2.42105 9.60279C2.8357 10.6065 3.53819 11.465 4.43999 12.07V12.1ZM8.40999 4.00001C8.14028 3.88903 7.85163 3.8313 7.55999 3.83001C7.26789 3.82666 6.97832 3.88457 6.70999 4.00001C6.45001 4.11281 6.2128 4.27208 6.00999 4.47001C5.81313 4.66782 5.65686 4.90222 5.54999 5.16001C5.43108 5.42373 5.37298 5.71081 5.37999 6.00001H6.24999C6.248 5.74166 6.32304 5.48858 6.46553 5.27306C6.60802 5.05755 6.8115 4.88938 7.04999 4.79001C7.21081 4.71926 7.3843 4.68184 7.55999 4.68001C7.7389 4.68186 7.91565 4.71925 8.07999 4.79001C8.3947 4.92458 8.64542 5.1753 8.77999 5.49001C8.84376 5.6526 8.87764 5.82538 8.87999 6.00001C8.87711 6.18102 8.83263 6.35895 8.74999 6.52001C8.65701 6.67565 8.54627 6.81995 8.41999 6.95001L7.99999 7.32001C7.84981 7.46019 7.70948 7.61054 7.57999 7.77001C7.44651 7.93638 7.33865 8.12176 7.25999 8.32001C7.16659 8.53418 7.12218 8.7665 7.12999 9.00001V9.44001H7.99999V9.00001C7.99806 8.81841 8.04282 8.63935 8.12999 8.48001C8.22217 8.32385 8.33299 8.17946 8.45999 8.05001C8.59275 7.90928 8.73295 7.77576 8.87999 7.65001C9.03016 7.50984 9.17049 7.35949 9.29999 7.20001C9.43347 7.03365 9.54132 6.84827 9.61999 6.65001C9.70505 6.44383 9.74921 6.22306 9.74999 6.00001C9.7487 5.70837 9.69097 5.41972 9.57999 5.15001C9.3446 4.63589 8.92809 4.2265 8.40999 4.00001ZM7.99999 11.22V10.34H7.12999V11.22H7.99999Z"
                },
                {
                    DialogIconKind.Issues,
                    "M3.88882 3.09546C4.95774 2.38123 6.21445 2 7.50002 2C9.22393 2 10.8772 2.68482 12.0962 3.90381C13.3152 5.1228 14 6.77609 14 8.5C14 9.78558 13.6188 11.0423 12.9046 12.1112C12.1903 13.1801 11.1752 14.0133 9.98745 14.5052C8.79973 14.9972 7.49283 15.1259 6.23196 14.8751C4.97108 14.6243 3.81287 14.0052 2.90383 13.0962C1.99479 12.1872 1.37571 11.0289 1.1249 9.76807C0.874098 8.50719 1.00281 7.20029 1.49478 6.01257C1.98674 4.82485 2.8199 3.80969 3.88882 3.09546ZM4.44436 13.0731C5.34883 13.6775 6.41223 14 7.50002 14C8.95871 14 10.3576 13.4205 11.3891 12.389C12.4205 11.3576 13 9.95869 13 8.5C13 7.4122 12.6775 6.34881 12.0731 5.44434C11.4688 4.53987 10.6098 3.83498 9.60476 3.4187C8.59977 3.00242 7.49392 2.89349 6.42703 3.10571C5.36013 3.31793 4.38018 3.84177 3.61099 4.61096C2.8418 5.38015 2.31796 6.36011 2.10574 7.427C1.89352 8.4939 2.00244 9.59974 2.41873 10.6047C2.83501 11.6097 3.53989 12.4688 4.44436 13.0731ZM8 5H7V10H8V5ZM8 11H7V12H8V11Z"
                },
                {
                    DialogIconKind.Stop,
                    "M11.820141,2.0150049 C10.720141,0.91500489 9.2201413,0.11500489 7.6201413,0.014999887 6.0201413,-0.085000113 4.4201413,0.31500489 3.1201413,1.2150049 1.7201413,2.1150049 0.8201413,3.4150049 0.3201413,5.0150049 -0.1798617,6.5150049 -0.079861696,8.2150049 0.5201413,9.7150149 1.1201413,11.215015 2.2201413,12.415015 3.6201413,13.215015 5.0201413,14.015015 6.6201413,14.215015 8.2201413,13.915015 9.8201413,13.615015 11.220141,12.715015 12.220141,11.515015 13.220141,10.215015 13.820141,8.7150049 13.820141,7.1150049 13.820141,5.1150049 13.120141,3.4150049 11.820141,2.0150049 z M11.520141,10.815015 C10.620141,11.915015 9.4201413,12.615015 8.1201413,12.915015 6.8201413,13.215015 5.4201413,13.015015 4.2201413,12.315015 3.0201413,11.615015 2.1201413,10.615015 1.5201413,9.3150149 0.9201413,8.0150049 0.9201413,6.6150049 1.3201413,5.3150049 1.7201413,3.9150049 2.5201413,2.8150049 3.6201413,2.0150049 4.7201413,1.2150049 6.1201413,0.91500489 7.4201413,1.0150049 8.8201413,1.1150049 10.020141,1.7150049 11.020141,2.7150049 12.120141,3.8150049 12.720141,5.4150049 12.720141,7.0150049 12.820141,8.4150049 12.320141,9.7150149 11.520141,10.815015 z M5.0201413,5.0150149 L9.0201413,5.0150149 9.0201413,9.0150149 5.0201413,9.0150149 5.0201413,5.0150149 z"
                },
            };
        }

        public static IDictionary<DialogIconKind, string> CreateColor()
        {
            return new Dictionary<DialogIconKind, string>()
            {
                {DialogIconKind.Blocked, "#C5C5C5"},
                {DialogIconKind.Error, "#F48771"},
                {DialogIconKind.Success, "#89D185"},
                {DialogIconKind.Warning, "#FFCC00"},
                {DialogIconKind.Info, "#75BEFF"},
                {DialogIconKind.Help, "#C5C5C5"},
                {DialogIconKind.Issues, "#C5C5C5"},
                {DialogIconKind.Stop, "#F48771"},
            };
        }
    }
}